class ListNode {
  val: number;
  next: ListNode | null;
  constructor(val?: number, next?: ListNode | null) {
    this.val = val === undefined ? 0 : val;
    this.next = next === undefined ? null : next;
  }
}

/**
 * 反转一个单链表。
 *
 * @param head 可能为空的链表头节点。
 * @returns 反转后的链表头节点。
 */
function reverseList(head: ListNode | null): ListNode | null {
  // 如果链表为空或只有一个节点，则不需要反转，直接返回。
  if (head === null || head.next === null) return head;

  // 初始化新的头节点为null，用于构建反转后的链表。
  let newHead: ListNode | null = null;
  // 遍历原链表，逐个节点反转。
  while (head) {
    // 暂存当前节点的下一个节点，用于后续移动到下一个节点。
    let current: ListNode | null = head.next;
    // 将当前节点的next指向前一个节点，实现反转。
    head.next = newHead;
    // 更新新的头节点为当前节点，为下一个节点的反转做准备。
    newHead = head;
    // 移动到下一个节点，继续反转。
    head = current;
  }

  // 返回反转后的链表头节点。
  return newHead;
}

const node = new ListNode(1);
node.next = new ListNode(2);
node.next.next = new ListNode(3);

const reverse = reverseList(node);
let current = reverse;
while (current) {
  console.log(current.val);
  current = current.next;
}

export {};
